DAL Delete methode
Eén rij uit de tabel verwijderen
Probleem
We hebben de id van de te deleted rij nodig om de te deleten rij in de tabel op te zoeken.
We willen feedback geven aan de gebruiker over de delete. Er zijn drie toestanden die we in de gaten moeten houden:
- database foutmelding
- sql foutmelding
- delete is gelukt
Design
We gebruiken een try catch om feedback te geven op systeemfouten en SQL server fouten. We interpreteren de retourwaarde van de ExecuteNonQuery
methode. Als parameter geven we een BBL object mee. In ASP.NET MVC is dat vaak het model. Als de Id niet bestaat zal SQL een 0 waarde retourneren.
Oplossing
Voeg de Delete
methode toe aan de Dal
klasse:
public int Delete(int Id) { MySqlConnection connection = new MySqlConnection(this.connectionString); // in de CommandText parameter geven we de naam van de stored procedure mee MySqlCommand command = new MySqlCommand("EventCategoryDelete", connection); // zeg aan het command object dat het een stored procedure // zal krijgen en geen SQL Statement command.CommandType = CommandType.StoredProcedure; // voeg de parameters toe die aan de stored procedure doorgegeven moeten worden MySqlParameter pId = new MySqlParameter(); pId.ParameterName = "pId"; pId.DbType = DbType.Int32; // De Id van de rij die moet worden geüpdated pId.Value = Id; command.Parameters.Add(pId); Message = "Niets te melden"; // we gaan ervan uit dat het mislukt int result = 0; using (connection) { try { connection.Open(); //Verbinding geslaagd result = command.ExecuteNonQuery(); // we moeten kijken naar de return van ExecuteNonQuery // retourneert het aantal rijen dat geüpdated is // is geüpdated als dat getal positief is if (result <= 0) { Message = $"De categorie met de Id {Id} kon niet worden gedeleted!"; } else { Message = $"De categorie met de Id {Id} is gedeleted!"; } } catch (MySqlException e) { this.message = e.Message; } RowCount = result; } // 0 of het aantal rijen dat gedeleted is return result; }
Testen
- Voeg de ReadOne methode toe in IDal:
using System.Collections.Generic; namespace FricFrac.Dal { interface IDal<T> { string Message { get; } int RowCount { get; } List<T> ReadAll(); T ReadOne(int id); int Create(T bll); int Update(T bll); int Delete(int id); } }
- Vervolledig de methode
FricFracDalTest
in het bestand Learning.cs:public static void FricFracDalTest() { Console.WriteLine(" Fric-frac DAL test"); FricFrac.Dal.EventCategory dal = new FricFrac.Dal.EventCategory(); List<FricFrac.Bll.EventCategory> list = dal.ReadAll(); Console.WriteLine($" {dal.RowCount} {dal.Message}"); foreach (FricFrac.Bll.EventCategory item in list) Console.WriteLine(" {0} {1}", item.Id, item.Name); FricFrac.Bll.EventCategory bll = new FricFrac.Bll.EventCategory(); bll = dal.ReadOne(4); Console.WriteLine($" {dal.RowCount} {dal.Message}"); bll = dal.ReadOne(200); // we lezen een bestaande categorie in bll = dal.ReadOne(6); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we proberen deze gevonden categorie weer toe te voegen dal.Create(bll); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we wijzigen de naam van de categorie bll.Name = "Hackathon Programmeren"; // En proberen die toe te voegen dal.Create(bll); Console.WriteLine($" {dal.RowCount} {dal.Message}"); // we zoeken de naam van de categorie bll.Name = "Hackathon Programmeren"; dal.ReadOne(bll.Id); // we wijzigen de naam van de categorie bll.Name = "Hackathon Programmeren Deel 2"; // En proberen die te updaten dal.Update(bll); Console.WriteLine($" {dal.RowCount} rij(en) gewijzigd, {dal.Message}"); // nu gaan we de Hackaton categorie deleten (bij mij Id = 23) // je moet de Id's nakijken, zeker als je experimenteert met de code dal.Delete(23); Console.WriteLine($" {dal.RowCount} rij(en) gedeleted, {dal.Message}"); // zet de naam van categorie met Id = 6 terug op Convention // We hebben dit daarnet gewijzigd in Hackathon Programmeren Deel 2 bll.Id = 6; bll.Name = "Convention"; dal.Update(bll); // En toon het nog eens list = dal.ReadAll(); Console.WriteLine($" {dal.RowCount} {dal.Message}"); foreach (FricFrac.Bll.EventCategory item in list) Console.WriteLine(" {0} {1}", item.Id, item.Name); }
- Roep de methode op in Program.cs:
using System; namespace AdoDotNet { class Program { public static void Main(string[] args) { Console.WriteLine("Leren werken met ADO.NET in .NET Core!"); // Learning.TestMySqlConnector(); // Learning.ReflectPropertiesTryOut(); // Learning.LearnDotNetCoreConfigurationApi(); Learning.FricFracDalTest(); Console.ReadKey(); } } }
- En dat is het resultaat:
2017-09-15 18:22:12